package br.com.locanet.dao.database.impl;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.PersistenceException;

import br.com.locanet.bean.impl.FilmeLocacao;
import br.com.locanet.dao.GenericJPADAO;

public class FilmeLocacaoDAO extends GenericJPADAO<FilmeLocacao> {
	
	@Override
	protected Object[] doPrepareQuery(StringBuffer query, FilmeLocacao entity) {
		List<Object> values = new ArrayList<Object>();
		
		for (Object obj : super.doPrepareQuery(query, entity)){
			values.add(obj);
		}
		
		if (entity.getId()!=null){
			query.append(" AND id = ? ");
		}
		if (entity.getFilme()!=null&&entity.getFilme().getId()!=null){
			query.append(" AND oEntidade.filme.id LIKE ? ");
			values.add("%"+entity.getFilme().getId()+"%");
		}
		if (entity.getCliente()!=null&&entity.getCliente().getId()!=null){
			query.append(" AND oEntidade.cliente.cpf = ? ");
			values.add(entity.getCliente().getId());
		}
		if (entity.getFuncionario()!=null&&entity.getFuncionario().getId()!=null){
			query.append(" AND oEntidade.funcionario.id = ? ");
			values.add(entity.getFuncionario().getId());
		}
		if (entity.getDataLocacao()!=null){
			query.append(" AND oEntidade.dataLocacao = ? ");
			values.add(entity.getDataLocacao());
		}
		if (entity.getDataDevolucao()!=null){
			query.append(" AND oEntidade.dataDevolucao = ? ");
			values.add(entity.getDataDevolucao());
		}
		if (entity.getPreco()!=null){
			query.append(" AND oEntidade.preco = ? ");
			values.add(entity.getPreco());
		}
		if (entity.getStatusPagamento()!=null){
			query.append(" AND oEntidade.statusPagamento = ? ");
			values.add(entity.getStatusPagamento());
		}
		
		return values.toArray();
	}
	
	@Override
	public FilmeLocacao doMerge(FilmeLocacao entity) throws PersistenceException {
		FilmeLocacao oldEntity = findById(entity);
			
		if (entity.getFilme()!=null&&entity.getFilme().getId()!=null)
			oldEntity.setFilme(entity.getFilme());
		if (entity.getCliente()!=null&&entity.getCliente().getId()!=null)
			oldEntity.setCliente(entity.getCliente());
		if (entity.getFuncionario()!=null&&entity.getFuncionario().getId()!=null)
			oldEntity.setFuncionario(entity.getFuncionario());
		if (entity.getDataLocacao()!=null)
			oldEntity.setDataLocacao(entity.getDataLocacao());
		if (entity.getDataDevolucao()!=null)
			oldEntity.setDataDevolucao(entity.getDataDevolucao());
		if (entity.getPreco()!=null)
			oldEntity.setPreco(entity.getPreco());
		if (entity.getStatusPagamento()!=null)
			oldEntity.setStatusPagamento(entity.getStatusPagamento());
			
		return oldEntity;
	}
	
}
